/**
 * Copyright (c) 2016,http://www.365wuliu.com/  All Rights Reserved.
 */
package com.cargo.security;

import com.cargo.base.utils.CommonUtil;
import com.cargo.base.utils.PropertiesUtil;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * JWTUtils:特殊加密类
 * 
 * @Project Name:cargo
 * @File Name:JWTUtils.java
 * @Package Name:com.cargo.security
 * @Creator:wizard
 * @Date:2016年4月14日下午2:21:58
 */
public class JWTUtils {

	/**
	 * 
	 * encode:获取永久有效的key
	 * 
	 * @param user
	 * @return
	 * @return :String
	 * @Creator:wizard
	 * @Date:2016年4月16日 下午11:53:06
	 */
	public static String encode(ShiroUser user) {
		Date d = null;
		try {
			d = new SimpleDateFormat("yyyy-MM-dd").parse("9999-01-01");
		} catch (ParseException e) {
		}
		return encode(CommonUtil.toJson(user), d);
	}

	/**
	 * 
	 * encode:获取一定分钟内有效的key
	 * 
	 * @param s
	 *            :待加密的shirouser对象字符串
	 * @return :String
	 * @Creator:wizard
	 * @Date:2016年4月15日 上午11:54:52
	 */
	public static String encode(String s, int minute) {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.MINUTE, minute);
		return encode(s, c.getTime());
	}

	/**
	 * 
	 * encode:获取带结束时间的的key
	 * 
	 * @param s
	 *            :待加密的shirouser对象字符串
	 * @return
	 * @return :String
	 * @Creator:wizard
	 * @Date:2016年4月15日 上午11:54:52
	 */
	public static String encode(String s, Date endDate) {
		String key = PropertiesUtil.getValue("api_key");
		return Jwts.builder().claim("user", s).setExpiration(endDate).signWith(SignatureAlgorithm.HS256, key).compact();
	}

	/**
	 * 
	 * decode:jwt解密
	 * 
	 * @param s
	 * @return
	 * @return :Claims
	 * @Creator:wizard
	 * @Date:2016年4月15日 下午12:00:36
	 */
	public static String decode(String s) {
		String key = PropertiesUtil.getValue("api_key");
		return Jwts.parser().setSigningKey(key).parseClaimsJws(s).getBody().get("user").toString();
	}
}
